package io;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

/**
 * 通过提高每次读写的数据量，减少实际读写的次数可以提高读写效率
 * 单字节读写是一种随机读写形式。
 * 一组字节的读写称为块读写。
 */
public class CopyDemo2 {
    public static void main(String[] args) throws IOException {
        FileInputStream fis = new FileInputStream("G:/Git-2.28.0-64-bit.exe");
        FileOutputStream fos = new FileOutputStream("G:/Git-2.28.0-64-bit_cp2.exe");
        /*
            InputStream和OutputStream中提供了块读写字节的方法

            块读取操作
            int read(byte[] data)
            一次性读取给定字节数组总长度的字节量并存入到数组中，返回值为实际读取到的
            字节数，如果返回值位-1则说明流读取到了末尾。

            例如用文件流读取一个文件:
            文件数据(5字节):
            11001100 11000011 00001111 11110000 10101010

            byte[] data = new byte[3];   {00000000,00000000,00000000}
            int len;

            len = fis.read(data);
                 文件第1个字节   2        3
            data:{11001100 11000011 00001111}
            len:3

            第二次调用:
            len = fis.read(data);
                 文件第4个字节  5        3(原来的数据)
            data:{11110000 10101010 00001111}
            len:2

            第三次调用:
            len = fis.read(data);
            data:{11110000 10101010 00001111}//数组没有变化了
            len:-1



            块写操作
            void write(byte[] data)
            一次性将给定的字节数组中所有字节写出

            void write(byte[] data,int offset,int len)
            将给定的字节数组从下标offset处开始的连续len个字节一次性写出
         */
        /*
            1字节(1byte)   00000000(8位2进制)
            1024byte      1kb
            1024kb        1mb
            1024mb        1gb
            1024gb        1tb

         */
        byte[] data = new byte[1024*10];//10kb
        int len;
        long start = System.currentTimeMillis();
        while((len = fis.read(data))!=-1){
            fos.write(data,0,len);
        }
        long end = System.currentTimeMillis();
        System.out.println("复制完毕!耗时:"+(end-start)+"毫秒");
        fis.close();
        fos.close();


    }
}






